#ifndef PROTOCOL_IMPL_HPP
#define PROTOCOL_IMPL_HPP
#include "stdint.h"

typedef enum MotorRWType{
    motor_position = 0x01,      //只读 读取电机位置
    Minimum_position = 0x02,    //读写 电机最小位置
    Maximum_position = 0x03,    //读写 电机最大位置
    Motion_margin = 0x04,       // 余量 已弃用
    Device_serial_number = 0x05, //读写 设备序列号
    Device_password = 0x06,     // 读写 设备密码
    Firmware_version = 0x07,    // 只读 固件版本
    chip_id = 0x08 ,            // 芯片唯一ID 只读
    n_data_points = 0x09,       // 读写 线性插值总数 
    x_data = 0x0a,              //读写 线性插值X
    y_data = 0x0b,              //读写 线性插值y
    position_correct = 0x0c,    // 只写 电机极限位置校准命令(单次)
    set_default = 0x0d,         // 只写 恢复外部存储器为默认数据设置
    inputduty_switch = 0x0e,    // 读写 输入PWM计算转换开关
    position_switch = 0x0f,     // 读写 电机位置计算转换开关
    calibration_switch = 0x10,  // 读写 驱动板上电电机位置校准开关
    bluetooth_switch = 0x11,    //  蓝牙开关状态
    interpolation_data_sync = 0x12  //  线性插值数据同步 
}MotorRWType_t;


int authenticate_impl(char * password);
uint16_t randKey_impl();
int sendResponse_impl(void *buffer,int size);
int  readData_impl(int index,void *buffer,int *size);
int  writeData_impl(int index,void *buffer,int size);

int startOTA_impl(uint32_t file_size);
int writeOTAData_impl(uint32_t address_offset,void *buffer,int size);
int verifyOTA_impl(void);

bool data_sync(int index,void *data);
bool data_load(int index);
bool init_load();
bool init_sync();

#endif

